layui.config({base: '/static/dream/lib/layui-extend/'}).define(['jquery','layer','cookie'], function(exports){ //提示：模块也可以依赖其它模块，如：layui.define('layer', callback);
    var $ = layui.jquery,
        layer = layui.layer,
        cookie = layui.cookie;

    // 左侧导航栏
    var slider = function (json, classNme) {
        // json 数据转换为 html
        var json2html = function(json){
                var strHtml = '';
                $.each(json, function (key, item) {
                    // 是否有子集
                    var isList = item.list.length > 0,
                        liClass = '',
                        href = 'javascript:;',
                        rightStr = '';

                    if (isList) {
                        // liClass += 'dream-show ';
                        liClass += ' class="dream-show"';
                        rightStr = '<span class="pull-right">\n' +
                            '<i class="fa fa-angle-left pull-right"></i>\n' +
                            '</span>\n';
                    }
                    // if (item.isActive) {
                    //     liClass += 'dream-active ';
                    // }

                    // if ((liClass = $.trim(liClass)) != '') {
                    //     liClass = ' class="'+liClass+'"';
                    // }

                    if (item.href != '') {
                        href = item.href;
                    }

                    strHtml += '<li'+liClass+'>\n' +
                        '<a href="'+href+'">\n' +
                        '<i class="'+item.icon+'"></i>\n' +
                        ''+item.name+'\n' +
                        rightStr +
                        '</a>\n';
                    if (isList) {
                        strHtml += '<ul>';
                        strHtml += json2html(item.list);
                        strHtml += '</ul>';
                    }
                });
                return strHtml;
            };
        $(classNme).html(json2html($slider));

        // 通过url地址添加绑定类
        // TODO: 其他连接地址连接到当前的页面  增加一个转换
        $("[href='"+window.location.pathname+"']").parents('li').addClass('dream-active');

        // 为左侧滑块添加绑定事件
        $('.dream-menu ul li a').on('click', function(){
            // 去除同级li中的所有选中标记
            $(this).parent().siblings('.dream-active').removeClass('dream-active');
            // 切换状态
            $(this).parent().toggleClass("dream-active");
        });
        };

    // 面包屑
    var crumbs = function(url = '', separator = '>'){
        var crumbs = [],
            single = {},
            href = '',
            str = '';
        $("[href='"+window.location.pathname+"']").parents('li').each(function(key, item){
            single.name = $.trim($(this).children('a').text());
            href = $(this).children('a').attr('href');
            if (href == '' || href == 'javascript:;') {
                href = $(this).find("ul>li:eq(0)>a").attr('href');
            }
            single.href = href;
            crumbs[key] = single;
            single = {}; // 不知道jq为啥可以将前面的所有值去除掉
        });
        if (url == '') {
            crumbs.push({name:'首页',href:'/html/index.html'});
        } else {
            crumbs.push({name:'首页',href:url});
        }
        // 反转数组
        crumbs.reverse();
        $.each(crumbs, function (key, item) {
            if (crumbs.length == key+1) {
                str += '<a href="javascript:;">'+item.name+'</a>'+'\n';
            } else {
                str += '<a href="'+item.href+'">'+item.name+'</a>'+'\n';
                str += '<span>'+separator+'</span>'+'\n';
            }
        });
        $('.data-dream-crumbs').html(str);
    };

    // 页面数据填充
    var pagefill = function(fill){
        var className = '',
            re = new RegExp("_","g");
        $.each(fill, function(key, item){
            switch (item.constructor) {
                case Object:
                    $.each(item, function(k, iitem){
                        className = '.data-'+key.replace(re, '-')+'-'+k.replace(re, '-');
                        $(className).append(iitem);
                    });
                    break;
                case String:
                    className = '.data-'+key.replace(re, '-');
                    $(className).append(item);
                    break;
            }
        });
    };

    // 打开事件
    var open  = function(){
        // 所有展开失去焦点关闭页面
        $('.dream-open').on('click', function(){
            $(this).toggleClass('open');
            event.stopPropagation();//阻止冒泡
        });

        $("body").click(function(){
            $('.dream-open').removeClass('open');
        });
    };

    // 后台提示消息
    var msg = function(cookieName = 'pageMsg') {
        var msg = cookie.getJSON(cookieName);
        if (typeof(msg) == "undefined") {
            return false;
        }
        var params = msg.params;
        // 纯原生
        switch (msg.type) {
            case 'open':
                layer.open(params.options);
                break;
            case 'msg':
                layer.msg(params.content, params.options);
                break;
        }
        cookie.remove(cookieName);
        // 废除  使用原生的不需要记住更多参数类型
        // var type = {
        //     msg:function (msg) {
        //         var attach = {};
        //         if (msg.hasOwnProperty('time')) {
        //             attach.time = msg.time;
        //         };
        //         layer.msg(msg.content,attach);
        //     },
        //     reply:function(msg){
        //         var param = {};
        //         param.content = msg.content;
        //         if (msg.hasOwnProperty('title')) {
        //             param.title = msg.title;
        //         }
        //         if (msg.hasOwnProperty('icon')) {
        //             param.icon = msg.icon;
        //         }
        //         layer.open(param);
        //     }
        // };
        // if ($.isEmptyObject(msg)) {
        //     return false;
        // }
        // var errorMsg = {
        //   content:'没有提示有效的内容',
        //     type:'没有提供有效的类型'
        // };
        // $.each(errorMsg, function (key, value) {
        //     if (!msg.hasOwnProperty(key)) {
        //         type.reply({title:'msg错误', content:value});
        //         return false;
        //     }
        // })
        // switch (msg.type) {
        //     case 'msg':
        //         type.msg(msg);
        //         break;
        //     case 'reply':
        //         type.reply(msg);
        //         break;
        // }
    };


    var init = function(){
        slider($slider, '.dream-menu ul');
        crumbs(); // 必须在slider下方
        pagefill($fill);
        msg();
        open();
    }

    // 初始化
    init();

    // var obj = {
    //     hello: function(str){
    //         alert('Hello '+ (str||'mymod'));
    //     },
    // };
    // //输出test接口
    exports('dream', {});
});